#ifndef _EB0_WINDOW_LISTENER_H_
#define _EB0_WINDOW_LISTENER_H_

// To be inherited with its functions altered through polymorphism
// The window that has had the event called upon is passed as an argument
// This allows a WindowListener to be attached to multiple windows

#include <EB0/Prereq.h>

namespace EB0
{
namespace Window
{
	class WindowListener abstract
	{
		friend class RenderWindow;

	public:
		WindowListener();
		~WindowListener();

	protected:
		virtual void onClose(RenderWindow* window);
		virtual void onResize(RenderWindow* window, const unsigned int width, const unsigned int height);
		virtual void onGainFocus(RenderWindow* window);
		virtual void onLoseFocus(RenderWindow* window);

		virtual void onCharEnter(RenderWindow* window, const unsigned int& chr);
		virtual void onKeyPress(RenderWindow* window, const sf::Event::KeyEvent& key);
		virtual void onKeyRelease(RenderWindow* window, const sf::Event::KeyEvent& key);

		virtual void onMouseEnter(RenderWindow* window);
		virtual void onMouseLeave(RenderWindow* window);
		virtual void onMouseButtonPress(RenderWindow* window, const sf::Event::MouseButtonEvent& mouseButton);
		virtual void onMouseButtonRelease(RenderWindow* window, const sf::Event::MouseButtonEvent& mouseButton);
		virtual void onMouseMove(RenderWindow* window, const sf::Event::MouseMoveEvent& mouseMove);
		virtual void onMouseWheelMove(RenderWindow* window, const int& mouseWheelMove);
	};
} // namespace Window
}

#endif // _EB0_WINDOW_LISTENER_H_